// Copyright (C) Kumo inc. and its affiliates.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//
#pragma once

#include <string>

namespace kumo::pollux::functions::window {
    // Register the Presto function nth_value(x, offset) with the bigint data type
    // for the offset parameter.
    void registerNthValueBigint(const std::string &name);

    // Register the Spark function nth_value(x, offset) with the integer data type
    // for the offset parameter.
    void registerNthValueInteger(const std::string &name);

    // Register the Presto function row_number() with the bigint data type
    // for the return value.
    void registerRowNumberBigint(const std::string &name);

    // Register the Spark function row_number() with the integer data type
    // for the return value.
    void registerRowNumberInteger(const std::string &name);

    // Register the Presto function rank() with the bigint data type
    // for the return value.
    void registerRankBigint(const std::string &name);

    // Register the Spark function rank() with the integer data type
    // for the return value.
    void registerRankInteger(const std::string &name);

    // Register the Presto function dense_rank() with the bigint data type
    // for the return value.
    void registerDenseRankBigint(const std::string &name);

    // Register the Spark function dense_rank() with the integer data type
    // for the return value.
    void registerDenseRankInteger(const std::string &name);

    // Returns the percentage ranking of a value in a group of values.
    void registerPercentRank(const std::string &name);

    // Register the Presto function ntile() with the bigint data type
    // for the return and input value.
    void registerNtileBigint(const std::string &name);

    // Register the Spark function ntile() with the integer data type
    // for the return and input value.
    void registerNtileInteger(const std::string &name);
} // namespace kumo::pollux::functions::window
